<?php
/**
 * peck 全局函数
 *    r222 这个版本修改了 中的   spl_autoload().
 * 
 * @filesource global.func.php
 * @package peck
 * @subpackage _functions
 * @version $id: 0.1, utf8, Sat Jan  9 10:30:11 CST 2010
 * @author LD King <kldscs[at]gmail.com>
 * @copyright Copyleft (D.) 2007 - 2010 MiFunny China Inc.
 * @link http://mifunny.info/
 * @see  
 */

// 检测SPL autoload, 定义常量
if (!function_exists('spl_autoload_register')){
	exit('peck failed: spl_autoload does not exist in this PHP installation.');
}
if(false === spl_autoload_functions()){
	if( function_exists('__autoload') ){
		spl_autoload_register('__autoload',false);
	}
}
spl_autoload_extensions('.php,.class.php'); //,.interface.php

/**
 * 自动加载 class/intarface
 * 
 * @param string $name 类名
 */
function _loader($name){//echo $name;
	spl_autoload($name); //这样也行?
/*try {
	spl_autoload( strtolower($name) );
    //    require_once $name.'.class.php';
  }catch(Exception $e){
   	throw new RuntimeException('('.__FUNCTION__.')Error: Class '.$name.' not found!');
    }*/
}
spl_autoload_register('_loader');

/**
 * 返回请求的信息 $_GET, $_POST, $_REQUEST ?
 *
 * @param string $param 
 * @param mixed $default 默认值
 *
 * @return mixed
 */
function _req($param, $default=null){
    if(isset($_GET[$param])){
    	return $_GET[$param];
    }elseif(isset($_POST[$param])){
    	return $_POST[$param];
    }else
		return $default;
}

/**
 * 获得第一行的返回值
 * 
 * @param string $statement SQL语句
 * @param int $life_time 缓存时间, 等于0: 缓存一直有效; 小于0: 缓存关闭;
 * @param string $cache_key 缓存ID
 * @param boolean $is_all 是否返回所有数组 
 * 
 * @return array 一维数组/二维数组
 */
function _one($statement, $life_time=-1, $cache_key=null, $is_all=FALSE){
	try{
		//是否缓存
		if( $life_time>=0 ){
			$cache_key = is_null($cache_key) ? $statement : $cache_key;
			$cache = _cache::object();
			if ( $data = $cache->get($cache_key, $life_time) ){
				return $data;
			}
		}
		
		$re = _db::object()->query($statement);
		if( is_object($re) ){
			if( $is_all ){ //返回所有数据
				$data = $re->fetchAll();
			}else { //返回单行数据
				$data = $re->fetch();
			}
			$re->nextRowset();
			
			if( $life_time>=0 and !empty($data) ){
				$cache->set($cache_key, $data, $life_time);
			}
			return $data;
		}else return false;
	}catch(Exception $err){
        return FALSE; //$err;
    }
}//END func _one

/**
 * 获得所有的返回值
 * 
 * @param string $statement SQL语句
 * 
 * @return array 二维数组
 */
function _all($statement, $life_time=-1, $cache_key=null){
	return _one($statement, $life_time, $cache_key, TRUE);
}//END func _all

/**
 * 返回处理过的字符串(用户SQL语句), 防止SQL注入
 *   注: 建议程序开始设置  @set_magic_quotes_runtime(0);
 * 
 * @param mixed $value
 * 
 * @return mixed
 */
function _q($value){
	if(is_string($value)){
		return _db::object()->quote($value);
	}else{
		return $value;
	}
}//END _q

/**
 * _view::_e
 *   显示变量? stripslashes
 *
 * @param mixed $value 需显示的变量, 字符串 or 数字
 * @param bool $escape 是否转义
 */
function _e($value, $escape=true){
    if($escape and is_string($value) ){
        echo nl2br(htmlspecialchars($value, ENT_QUOTES));
    }else{
        echo $value;
    }
}//END func _e 

/**
 * _view::_h, 与 _e 类似, 不过是 return
 *   显示变量? stripslashes
 *
 * @param mixed $value 需显示的变量, 字符串 or 数字
 * @param bool $escape 是否转义
 *
 * @return string
 */
function _h($value, $escape=true){
    return $escape ? htmlspecialchars($value, ENT_QUOTES) : htmlspecialchars($value);
}//END func _h 

/**
 * 取得微妙
 * 
 * @return float
 */
function _mtime(){
	list($usec, $sec) = explode(' ', microtime());
    return ((float)$usec + (float)$sec);
}//END func _mtime

?>
